package Api.AliPay.DirectPay;

import Util.HttpUtil;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import static Util.Tools.MaptoStr;
import static Util.Tools.getMD5;

/**
 * 支付宝直连支付查询
 */
public class AliPayDirectPayQuery {
    public static void main(String[] args) {
        try {
            // 目标URL
            String url = "https://jhpay.heemoney.com/DirectPay/query.aspx";
            //MD5密钥，商户后台网关密钥下面第一个
            String key = "852B4A10455E49F280EEFCB1";
            //商户编号，（汇付宝商户内码：七位整数数字）
            String agent_id = "2083328";

            // 获取当前14位时间戳
            Date now = new Date();
            // 创建 SimpleDateFormat 对象，指定日期格式
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
            String timestamp = dateFormat.format(now);

            //固定版本号
            String version = "1";
            //商户系统内部的订单号（要保证唯一）
            String agent_bill_id ="20240325173450";
            //	提交单据的时间yyyyMMddHHmmss，该参数共计14位，当时不满14位时，在后面加0补足14位
            String agent_bill_time =timestamp;
            //查询结果返回类型，1=字符串返回
            String return_mode = "1";




            Map<String, String> parameters = new HashMap<String, String>();

            //拼接待加密参数
            StringBuilder builder = new StringBuilder();
            builder.append("version=");
            builder.append(version);
            builder.append("&agent_id=");
            builder.append(agent_id);
            builder.append("&agent_bill_id=");
            builder.append(agent_bill_id);
            builder.append("&agent_bill_time=");
            builder.append(agent_bill_time);
            builder.append("&key=");
            builder.append(key);


            String Date = builder.toString();
            //MD5加密得出签名结果
            String sign = getMD5(Date);


            //拼接请求参数
            parameters.put("version", version);
            parameters.put("agent_id", agent_id);
            parameters.put("agent_bill_id", agent_bill_id);
            parameters.put("agent_bill_time", agent_bill_time);
            parameters.put("return_mode", return_mode);
            parameters.put("sign", sign);


            //打印请求参数
            String Str = MaptoStr(parameters);
            System.out.println("发送请求数据：-------------------------------->"+ Str);

            String Result = HttpUtil.sendPost2(url, parameters);
            System.out.println("返回响应数据：-------------------------------->"+Result);

            /**
             * <?xml version="1.0" encoding="utf-8"?>
             *     <root>
             *         <ret_code>0000</ret_code>
             *         <ret_msg>查询单据支付完</ret_msg>
             *         <agent_id><![CDATA[2083328]]></agent_id>
             *         <agent_bill_id><![CDATA[20240325173450]]></agent_bill_id>
             *         <jnet_bill_no><![CDATA[H24032517252211T]]></jnet_bill_no>
             *         <pay_type><![CDATA[22]]></pay_type>
             *         <result><![CDATA[1]]></result>
             *         <pay_amt><![CDATA[0.01]]></pay_amt>
             *         <pay_message><![CDATA[]]></pay_message>
             *         <remark><![CDATA[]]></remark>
             *         <deal_time><![CDATA[20240325173536]]></deal_time>
             *         <sign><![CDATA[8aee24d3defc40799147e7c3fad125e5]]></sign>
             *     </root>
            */

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
